package parser;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.xml.sax.SAXException;

import java.io.IOException;

/**
 * @author 石小俊
 * @date 2023年11月01日 15:08
 */
public class DigesterParser {

    public static void main(String[] args) {
        // 1.获取解析器
        // 解析器需要将一个XML映射成一个对应的Java对象来处理
        // 在commons-digester中是通过一个XML文件来对需要解析文件与Java对象关联的
        // 这个关联XML文件不需要我们进行解析,第三方工具已经解析完成
        // 我们只需要按照它的约束进行操作即可
        Digester digester = DigesterLoader.createDigester(DigesterParser.class.getClassLoader().getResource("parser/rule.xml"));


        // 2.准备一个Java对象用来接收解析后的数据
        // 该对象即为XML文件所映射的Java对象
        ClassBean classBean = new ClassBean();

        // 3.将这个对象交给解析器
        digester.push(classBean);

        try {
            System.out.println("解析前:"+classBean);
            // 4.进行解析
            digester.parse(DigesterParser.class.getClassLoader().getResourceAsStream("students.xml"));

            // 5.解析后的所有数据均被第三方工具存放到事先准备好的对象中了
            // 因此,可以根据解析后的数据进行操作
            System.out.println("解析后:"+classBean);
            System.out.println("2号学生的姓名:"+classBean.findStudent("2").getName());
            System.out.println("1号学生的性别:"+classBean.findStudent("1").getGender());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
    }

}
